package com.quxiu.system.service;

import java.util.List;
import com.quxiu.system.domain.BpmProcInst;
import com.quxiu.system.domain.vo.*;

/**
 * 流程实例Service接口
 *
 * @author quxiu
 * @date 2024-06-14
 */
public interface IBpmProcInstService {
    /**
     * 查询流程实例
     *
     * @param procInstId 流程实例主键
     * @return 流程实例
     */
    public BpmProcInstInfoVo getBpmProcInstInfo(Long procInstId, Long userId);

    /**
     * 查询流程实例列表
     *
     * @param param 流程实例
     * @return 流程实例集合
     */
    public List<BpmProcInst> myApproveList(BpmApproveSearchParam param);

    /**
     * 查询流程交接列表
     * @param param
     * @return
     */
    List<BpmProcInst> handoverList(BpmApproveSearchParam param);

    /**
     * 新增流程实例
     *
     * @param param 流程实例
     * @return 结果
     */
    public void insertBpmProcInst(BpmProcInstVo param);

    /**
     * 修改流程实例
     *
     * @param bpmProcInst 流程实例
     * @return 结果
     */
    public int updateBpmProcInst(BpmProcInst bpmProcInst);

    /**
     * 批量删除流程实例
     *
     * @param procInstIds 需要删除的流程实例主键集合
     * @return 结果
     */
    public int deleteBpmProcInstByProcInstIds(Long[] procInstIds);

    /**
     * 删除流程实例信息
     *
     * @param procInstId 流程实例主键
     * @return 结果
     */
    public int deleteBpmProcInstByProcInstId(Long procInstId);

    List<BpmNodeByApplyVo> calculateNodeInst(BpmProcInstVo param);

    List<BpmApprovalRecordVo> getApprovalRecord(Long procInstId);

    /**
     * 审批看版
     * 获取【我发起的、待处理、已处理、我收到的】的审批记录数量
     */
    BpmApprovalBoard getApprovalBoard(Long userId);

}
